Hooks contains our logic code in our React app.
We can create our own hooks and use hooks provided by other people.
In this article, we’ll look at some useful React hooks.
useWorker
The useWorker hook lets us use web workers easily in our React app.
To install it, we run:
npm install --save @koale/useworker
Then we can use it by writing:
import React from "react";
import { useWorker } from "@koale/useworker";
const numbers = [...Array(1000000)].map(e => Math.random() * 1000000);
const sortNumbers = nums => nums.sort();
export default function App() {
const [sortWorker] = useWorker(sortNumbers);
const runSort = async () => {
const result = await sortWorker(numbers);
console.log("End.");
};
return (
<>
<button type="button" onClick={runSort}>
Run Sort
</button>
</>
);
}
We have a large numbers
array that we want to sort.
We want to do this in the background so that we can use our app to do something else.
Once we click the button, tjhe runSort
function runs, which uses the sortWorker
function to do the sorting.
We just pass our long-running function we want to run with useWorker
.
Once it’s done, we’ll log 'End.'
to indicate that it’s done.
@rehooks/component-size
@rehooks/component-size is a hook that lets us get the size of a component.
To use it, we run:
yarn add @rehooks/component-size
to install it.
Then we use it by writing:
import React from "react";
import useComponentSize from "@rehooks/component-size";
export default function App() {
const ref = React.useRef(null);
const size = useComponentSize(ref);
const { width, height } = size;
let imgUrl = `https://via.placeholder.com/${width}x${height}`;
return (
<div>
<img ref={ref} src={imgUrl} style={{ width: "100vw", height: "100vh" }} />
</div>
);
}
We set the image size to fill the whole screen.
We pass the ref into the image so that we can get the image size with the useComponentSize
hook.
Then the width
and height
will have the latest width and height values of the image.
rehooks/document-visibility
We can use the rehooks/document-visibility package to get the visibility of a page.
To use it, we run:
yarn add @rehooks/document-visibility
to install it.
Then we can use it by writing:
import React from "react";
import useDocumentVisibility from "@rehooks/document-visibility";
export default function App() {
const documentVisibility = useDocumentVisibility();
return <div>{documentVisibility}</div>;
}
We just call the hook and then get the visibility value.
@rehooks/input-value
The @rehooks/input-value package has a hook to let us bind input values to a state automatically.
To install it we run:
yarn add @rehooks/input-value
Then we can write:
import React from "react";
import useInputValue from "@rehooks/input-value";
export default function App() {
let name = useInputValue("mary");
return (
<>
<p>{name.value}</p>
<input {...name} />
</>
);
}
to use it.
We get the value that’s inputted with the value
property.
And we pass all the properties as props of the input.
We pass in the default value to the hook.
@rehooks/local-storage
The @rehooks/local-storage lets us manipulate local storage in our React app with some hooks.
To install it, we run:
yarn add @rehooks/local-storage
or:
npm i @rehooks/local-storage --save
Then we can use it by writing:
import React from "react";
import { writeStorage, useLocalStorage } from "@rehooks/local-storage";
export default function App() {
const [counterValue] = useLocalStorage("i", 0);
return (
<>
<p>{counterValue}</p>
<button onClick={() => writeStorage("i", counterValue + 1)}>
increment
</button>
</>
);
}
We get the value with the useLocalStorage
hook.
The first argument is the key. The 2nd is the initial value.
writeStorage
lets us write the value with the given key and the value respectively.
Conclusion
There are useful for getting component sizes, manipulating local storage, and binding input values.